前言

近期收到要求修正來自於Nessus的報告弱點修正 ,雖然並不是專門處理的SP或MIS什麼的,只是個弱弱的碼農,但手上經手拿來開發、展示的虛擬機器有個幾台,這篇文章是紀錄如何處理來自於Nessus的弱點。
先前在客戶端也碰到一模一樣的弱點,那個時候的SP大大處理完後,只講了一句:「很恐怖,不要問」,沒想到過了半年,就落到自己頭上來了。

處理弱點

本次處理的弱點Port號皆為3389,也就是預設用來RDP的通訊埠號。

編號 名稱 原文 概要
51192 無法信任 SSL 憑證 SSL Certificate Cannot Be Trusted 無法信任此服務的 SSL 憑證。
57582 SSL 自我簽署憑證 SSL Self-Signed Certificate 此服務的 SSL 憑證鏈結以未識別的自我簽署憑證結束。

※ 當然Nessus的解法說明也很簡單,花錢買對的憑證就對了,但想也知道不可能為了開發用的機器,一台一台去購買。另外一條路就是建立自己內部的憑證中心,並且簽發。

環境

  1. Host - Windows 11 - 22H2 (22621.1992)
  2. Target - Windows Server 2022 - 21H2 (20348.1906)

測試修改流程

建立使用SSL憑證

參考先前的文章 使用PowerShell建立自簽SSL憑證 ,快速建立一張測試用的憑證。

# 子憑證輸出密碼
$certPassword = ConvertTo-SecureString -String "secure" -Force -AsPlainText;
$certFilePath = "Certificate"
# 建立CA
$caparam = @{  
    Subject           = 'C=TW,ST=Taiwan,L=Taipei,O=Demo,OU=IT,CN=Demo Develop CA,E=nobody@demo.net'  
    KeyUsage          = @("CertSign", "CrlSign")  
    CertStoreLocation = 'Cert:\LocalMachine\My'  
    TextExtension     = @('2.5.29.19={text}CA=true&pathlength=0')  
    HashAlgorithm     = "SHA256"  
    NotAfter          = (Get-Date).AddYears(20)  
    KeyAlgorithm      = "RSA"  
    KeyLength         = 4096  
    FriendlyName      = "DemoCA"  
}  

$rootCa = New-SelfSignedCertificate @caparam;  

# 建立憑證參數  
$paramsCert = @{  
    Type              = 'Custom'  
    Subject           = 'C=TW,ST=Taiwan,L=Taipei,O=ESi,OU=IT,CN=Demo Develop Cert,E=nobody@demo.net'  
    KeyUsage          = @('DigitalSignature', 'DataEncipherment', 'KeyEncipherment')  
    TextExtension     = @(  
        '2.5.29.37={text}1.3.6.1.5.5.7.3.2,1.3.6.1.5.5.7.3.1',  
        '2.5.29.17={text}DNS=target&IPAddress=10.100.100.101' )  
    KeyAlgorithm      = 'RSA'  
    KeyLength         = 4096  
    KeyExportPolicy   = "Exportable"  
    CertStoreLocation = 'Cert:\LocalMachine\My'  
    NotAfter          = (Get-Date).AddYears(20)  
    Signer            = $rootCa;  
    FriendlyName      = "Demo 開發憑證"  
}  

# 建立自簽憑證  
$selfSign = New-SelfSignedCertificate @paramsCert;  

# 移動CA憑證到可信任的位置  
$rootCa | Move-Item -Destination "Cert:\LocalMachine\Root";  

New-Item -Path $certFilePath -ItemType Directory -Force

# 產出憑證檔案  
Export-PfxCertificate -Cert $selfSign -FilePath "$certFilePath\server.pfx" -Password $certPassword  
Export-PfxCertificate -Cert $rootCa -FilePath "$certFilePath\ca.pfx" -Password $certPassword;

在Host機器匯入CA

將CA憑證匯入Host,讓Host可信任這張CA所簽發的憑證。

在Host嘗試遠端進入

基本上沒做設定的情況下,Windows會自動產生同機器名稱的SSL自簽憑證。
錯誤的憑證

在Target取得憑證指紋

如果依照先前簡便自簽的方式,憑證應該已經匯入到「個人」中,所以可以簡單找到憑證的指紋碼(Thumbprint)。  
憑證指紋

在Target開啟CMD,輸入指令

CMD

wmic /namespace:\\root\cimv2\TerminalServices PATH Win32_TSGeneralSetting Set SSLCertificateSHA1Hash="THUMBPRINT"

在Host驗證憑證

遠端測試,檢視憑證為新簽立憑證。
遠端憑證

※ 由於實際上還是自簽的憑證,就不特別處理CRL的問題了,這可能就真的需要建立憑證中心了。

結語

本篇只是測試更換RDP所使用的SSL憑證內容,但由於沒辦法說想重新掃描就做,這樣做能不能處理掉這些弱點也不是很清楚,但就實務上來說,應付這種掃描的作法,感覺上最直接的方式還是直接將防火牆做點對點的開放,也就是只開放需要系統的Client端連入即可。
防火牆設定

參考

  1. 遠端桌面接聽程序憑證設定

#rdp #SSL Self-Signed Certificate #SSL Certificate Cannot Be Trusted #nessus #change rdp certificate







Related Posts

JavaScript函式(function)

JavaScript函式(function)

gitHub 的 SSH key 設定

gitHub 的 SSH key 設定

【前端學習】innerText 與 textContent 的差異

【前端學習】innerText 與 textContent 的差異


Comments